{
  stdenv,
  toKodiAddon,
  addonDir,
  cmake,
  kodi,
  kodi-platform,
  libcec_platform,
}:
{
  name ? "${attrs.pname}-${attrs.version}",
  namespace,
  version,
  extraNativeBuildInputs ? [ ],
  extraBuildInputs ? [ ],
  extraRuntimeDependencies ? [ ],
  extraCMakeFlags ? [ ],
  extraInstallPhase ? "",
  ...
}@attrs:
toKodiAddon (
  stdenv.mkDerivation (
    {
      name = "kodi-" + name;

      dontStrip = true;

      nativeBuildInputs = [ cmake ] ++ extraNativeBuildInputs;
      buildInputs = [
        kodi
        kodi-platform
        libcec_platform
      ]
      ++ extraBuildInputs;

      inherit extraRuntimeDependencies;

      # disables check ensuring install prefix is that of kodi
      cmakeFlags = [
        "-DOVERRIDE_PATHS=1"
      ]
      ++ extraCMakeFlags;

      # kodi checks for addon .so libs existence in the addon folder (share/...)
      # and the non-wrapped kodi lib/... folder before even trying to dlopen
      # them. Symlinking .so, as setting LD_LIBRARY_PATH is of no use
      installPhase =
        let
          n = namespace;
        in
        ''
          runHook preInstall

          make install

          [[ -f $out/lib/addons/${n}/${n}.so ]] && ln -s $out/lib/addons/${n}/${n}.so $out${addonDir}/${n}/${n}.so || true
          [[ -f $out/lib/addons/${n}/${n}.so.${version} ]] && ln -s $out/lib/addons/${n}/${n}.so.${version} $out${addonDir}/${n}/${n}.so.${version} || true

          ${extraInstallPhase}

          runHook postInstall
        '';
    }
    // attrs
  )
)
